home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 4490 / 4490.xpi / chrome / wmn.jar / content / overlay.js < prev    next >
Text File  |  2010-01-27  |  11KB  |  266 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is WebMail Notifier.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Byungwook Kang.
  18.  * Portions created by the Initial Developer are Copyright (C) 2007
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. const dout=Components.utils.reportError;
  38.  
  39. var wmn = {
  40.   mailInfo:[],
  41.   
  42.   onClick: function(aEvent) {
  43.     if (aEvent &&(aEvent.button == 2||(aEvent.button ==0&&aEvent.ctrlKey)))
  44.       return;
  45.     if(aEvent &&((aEvent.button == 0&&aEvent.shiftKey)||aEvent.button == 1)){
  46.       this.onCheckNow();
  47.       return;
  48.     }
  49.     if(this._getBoolPref("keepAlert"))this.closeWindow("alert:alert","wmn_alert");
  50.     if(this.mailInfo.length==1){
  51.       this.nsIWebMailNotifier.openMail(this.mailInfo[0].ind,null);
  52.       return;
  53.     }
  54.     var openAll=aEvent && (aEvent.button == 0&&(aEvent.altKey||aEvent.metaKey));
  55.     this.nsIWebMailNotifier.openMails(openAll);
  56.   },
  57.   onCheckNow: function() {
  58.     this.nsIWebMailNotifier.checkMails(false);
  59.   },
  60.   onOpenWMN: function() {
  61.     this.nsIWebMailNotifier.openWMN();
  62.   },
  63.   onPreferences: function() {
  64.     this.nsIWebMailNotifier.openOptions();
  65.   },
  66.  
  67.   _getBoolPref: function(name){
  68.     var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  69.                                 .getService(Components.interfaces.nsIPrefService);
  70.     var branch = prefService.getBranch("extensions.wmn.");
  71.     branch.QueryInterface(Components.interfaces.nsIPrefBranch2);
  72.     return branch.getBoolPref(name);
  73.   },
  74.   openMail: function(ind,aEvent,folder) { 
  75.     if(aEvent && aEvent.shiftKey)this.nsIWebMailNotifier.checkMail(ind);
  76.     else this.nsIWebMailNotifier.openMail(ind,folder);
  77.   },
  78.   getHostName: function(host) {
  79.     try{
  80.       return this.getString(host);
  81.     }catch(e){}
  82.     var t=this.nsIWebMailNotifier.getHostName(host);
  83.     return t?t:host;
  84.   },
  85.   getString: function(aName,aData) {
  86.     if(aData){
  87.       return this.strings.getFormattedString(aName,[ aData ]);
  88.     }else return this.strings.getString(aName);
  89.   },
  90.   getAccountName: function(aID,aUser) {
  91.     if(this.nsIWebMailNotifier.getAccountsInHost(aID)>1){
  92.       return this.getHostName(aID)+" ["+aUser+"]";
  93.     }else{
  94.       return this.getHostName(aID);
  95.     }
  96.   },
  97.  
  98.   /***********************************************************
  99.   WebMailListener implementation
  100.   ***********************************************************/
  101.   onStateChange: function(aIndex,aCount,aData){
  102.     if(aIndex==Components.interfaces.nsIWebMailNotifier.ST_INIT){
  103.       this.checkFirstrun();                                                  
  104.       this.initCount();    
  105.     }else if(aIndex==Components.interfaces.nsIWebMailNotifier.ST_SHOWICON){
  106.       document.getElementById("wmn-statusbar").collapsed=aCount==0;
  107.       return;
  108.     }else if(aIndex==Components.interfaces.nsIWebMailNotifier.ST_RESET){//accounts change
  109.       this.initCount();
  110.     }else{
  111.       var ar=this.nsIWebMailNotifier.getAccountInfo({},aIndex);
  112.       var aID=ar[0];
  113.       var aUser=ar[1];              
  114.       for(var i in this.mailInfo){
  115.         var o=this.mailInfo[i];
  116.         if(o.host==aID&&o.user==aUser){
  117.           o.mailCount=aCount;
  118.           o.mailData=decodeObject(aData);
  119.           var menu=document.getElementById("wmn-context-menu").childNodes[i];
  120.     //      menu.setAttribute("image",aCount>0?"chrome://wmn/content/mail-new.png":"");
  121.           menu.setAttribute("style","font-weight:"+(aCount>0?"bold":"normal")+(aCount<0?";color:GrayText":""));
  122.           if(aCount>=0){
  123.             menu.setAttribute("class","menuitem-iconic");
  124.           }else{
  125.             menu.removeAttribute("class");
  126.           }      
  127.           break;
  128.         }
  129.       }
  130.     }
  131.     //clear tooltip message
  132.     var msgbox=document.getElementById("wmn-tooltip-text");
  133.     while(msgbox.firstChild != null)msgbox.removeChild(msgbox.firstChild);
  134.  
  135.     var total=0;
  136.     for each(var o in this.mailInfo){
  137.       if(o.mailCount>0){
  138.         total+=o.mailCount;
  139.         var desc = document.createElement("description");
  140.         desc.setAttribute("value",o.name+" : "+o.mailCount);
  141.         desc.setAttribute("style","color: green;");
  142.         msgbox.appendChild(desc);
  143.       }
  144.     }
  145.     if(total==0){
  146.         var desc = document.createElement("description");
  147.         desc.setAttribute("value",this.getString("NoNewMail"));
  148.         desc.setAttribute("style","color: grey;");
  149.         msgbox.appendChild(desc);
  150.     }
  151.     for each(var o in this.mailInfo){
  152.       if(o.mailCount<0){
  153.         var desc = document.createElement("description");
  154.         desc.setAttribute("value",o.name+" : "+this.getString("NotChecked"));
  155.         desc.setAttribute("style","color: red;");
  156.         msgbox.appendChild(desc);
  157.       }
  158.     }
  159.     var elm=document.getElementById("wmn-statusbar");
  160.     elm.setAttribute("newMail", total>0);
  161.     elm.setAttribute("label",total>0?total:"");
  162.     elm=document.getElementById("wmn-toolbar-button");
  163.     if(elm){
  164.       elm.setAttribute("newMail", total>0);
  165.       elm.setAttribute("value",total>0?total:"");
  166.     }
  167.   },
  168.  
  169.   openCaptchaDialog: function(host,user,arg) {
  170.     var params = {inn:{host:this.getHostName(host),user:user,secimage:"https://ab.login.yahoo.com/img/"+arg+".jpg"}, out:null};
  171.     var features = "chrome,titlebar,toolbar,centerscreen,modal";
  172.     window.openDialog("chrome://wmn/content/captcha.xul","",features,params).focus();
  173.     if (params.out)return params.out.secword;
  174.     else return null;
  175.   },
  176.   showAlertNotification: function(total){
  177.     window.openDialog("chrome://wmn/content/alert.xul","wmn_alert",
  178.         "chrome,dialog=yes,titlebar=no,popup=yes",
  179.         this.mailInfo,this).focus();
  180.   },
  181.   /**********************************************************/
  182.   closeWindow: function(type,name){
  183.     var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
  184.              .getService(Components.interfaces.nsIWindowMediator);
  185.     var enm = wm.getEnumerator(type);
  186.     while(enm.hasMoreElements()){
  187.       var win = enm.getNext();
  188.       if(win.name==name){
  189.         win.close();
  190.         return;
  191.       }
  192.     }
  193.   },
  194.   initCount: function() { 
  195.       var menu=document.getElementById("wmn-context-menu");
  196.       var sep=document.getElementById("wmn-menu-sep");
  197.  
  198.       for(var i = 0; i < this.mailInfo.length; i++)menu.removeChild(menu.firstChild);
  199.       var n=this.nsIWebMailNotifier.getAccountsNumber();
  200.       this.mailInfo=[];
  201.       for(var i=0;i<n;i++){
  202.         if(!this.nsIWebMailNotifier.isAccountEnabled(i))continue;
  203.         var ar=this.nsIWebMailNotifier.getAccountInfo({},i);
  204.         var id=ar[0];
  205.         var username=ar[1];      
  206.         this.mailInfo.push({host:id,user:username,ind:i});        
  207.       }
  208.     for(var i in this.mailInfo){
  209.         var o=this.mailInfo[i];
  210.         o.mailCount=0;
  211.         o.name=this.getAccountName(o.host,o.user);      
  212.         var mi = document.createElement("menuitem");
  213.         mi.setAttribute("label",o.name);
  214.         mi.setAttribute("oncommand","wmn.openMail("+o.ind+",event)");
  215.         mi.setAttribute("style","color:GrayText");
  216.         mi.setAttribute("image",this.nsIWebMailNotifier.getIconURL(o.host,o.user));      
  217.         menu.insertBefore(mi,sep);
  218.       }
  219.   },
  220.  
  221.   checkFirstrun: function(){
  222.     var ver = -1;
  223.     var gExtensionManager = Components.classes["@mozilla.org/extensions/manager;1"]
  224.                             .getService(Components.interfaces.nsIExtensionManager);
  225.     var current = gExtensionManager.getItemForID("{37fa1426-b82d-11db-8314-0800200c9a66}").version;        
  226.     var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  227.                                 .getService(Components.interfaces.nsIPrefService);
  228.     var branch = prefService.getBranch("extensions.wmn.");  
  229.     try{
  230.       ver = branch.getCharPref("version");
  231.     }catch(e){
  232.     }finally{
  233.       if (ver!=current){      
  234.         branch.setCharPref("version",current);
  235.         this.nsIWebMailNotifier.postInstall();//for fx 2
  236.         var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
  237.         var tmp={
  238.           notify:function(aTimer){
  239.              wmn.nsIWebMailNotifier.openInTab("http://webmailnotifier.mozdev.org/updated.html");
  240.           }
  241.         };        
  242.         timer.initWithCallback(tmp,1500,Components.interfaces.nsITimer.TYPE_ONE_SHOT); //Firefox 2 fix - or else tab will get closed       
  243.       }
  244.     }
  245.   },
  246.  
  247.   onLoad: function() {
  248.     wmn.strings = document.getElementById("wmn-strings");
  249.     if(!wmn._getBoolPref("showStatusbarIcon"))document.getElementById("wmn-statusbar").collapsed=true;
  250.     try {
  251.       wmn.nsIWebMailNotifier = Components.classes["@mozilla.org/WebMailNotifier;1"]
  252.                                                   .getService(Components.interfaces.nsIWebMailNotifier);
  253.       wmn.nsIWebMailNotifier.addListener(wmn);                                                  
  254.     } catch (e){
  255. dout(e);
  256.     }
  257.     window.removeEventListener("load", wmn.onLoad, false);
  258.   },
  259.  
  260.   onUnload: function() {
  261.     if (wmn.nsIWebMailNotifier)wmn.nsIWebMailNotifier.removeListener(wmn);
  262.   }    
  263. };
  264.  
  265. window.addEventListener("load", wmn.onLoad, false);
  266. window.addEventListener("unload", wmn.onUnload, false);